/**
 * Copyright (c), 上海沃恩信息科技有限公司.
 * All rights reserved.
 * Licensed under BSD (https://www.pittypat.work/bsd.html).
 */

package pittypat.configuration;

/**
 * 用于配置一个应用。
 */
public final class AppConfig {
	private String developer;
	private String identifier;
	private String status;
	private ModuleConfig[] modules;

	/**
	 * 使用开发者代码、标识符和模块列表初始化 AppConfig 类的新实例。
	 * 
	 * @param developer
	 *            开发者代码。
	 * @param identifier
	 *            标识符。
	 * @param modules
	 *            模块列表。
	 */
	public AppConfig(String developer, String identifier, String status, ModuleConfig[] modules) {
		this.developer = developer == null ? "" : developer;
		this.identifier = identifier == null ? "" : identifier;
		this.status = status == null ? "" : status;
		this.modules = modules;
	}

	/**
	 * 获取应用的开发者代码，不区分大小写。
	 * 
	 * @return 开发者代码，不区分大小写。
	 */
	public String getDeveloper() {
		return this.developer;
	}

	/**
	 * 获取应用的标识符，不区分大小写。
	 * 
	 * @return 标识符，不区分大小写。
	 */
	public String getIdentifier() {
		return this.identifier;
	}

	/**
	 * 获取应用的当前状态。
	 * <p>
	 * 目前支持 "Normal"（或中文 "正常"）、"Maintenance"（或中文 "维护"），不区分大小写。如果不提供，则默认为 "正常"。
	 * <p>
	 * 如果隶属应用的状态为 "维护"，则应用中所有模块的状态都将为 "维护"。如果需要提供自定义的客户端反馈信息，使用 "维护:自定义信息" 或 "Maintenance:自定义信息" 的格式。
	 * <p>
	 * 处在 "维护" 状态中的模块暂时不可访问，但是仍然会出现在用户导航列表中，并向用户提示 "正在维护" 的消息。
	 * 
	 * @return 当前状态的字符串。
	 */
	public String getStatus() {
		return this.status;
	}

	/**
	 * 获取隶属于当前应用的所有模块的配置列表。
	 * 
	 * @return 所有模块的配置列表。
	 */
	public ModuleConfig[] getModules() {
		return this.modules;
	}

	/**
	 * 获取指定标识符的模块配置信息。
	 * 
	 * @param identifier
	 *            模块标识符，不区分大小写。
	 * @return 具有指定标识符的模块配置信息，如果没有找到，则返回 null。
	 */
	public ModuleConfig getModuleConfig(String identifier) {
		for (ModuleConfig c : this.modules) {
			if (c.getIdentifier().equalsIgnoreCase(identifier)) {
				return c;
			}
		}

		return null;
	}
}
